1 module mruby.variable;
2 
3 import mruby;
4 import mruby.value;
5 import mruby.object;
6 import mruby.mrb_class;
7 
8 extern (C):
9 
10 struct global_variable
11 {
12 	int counter;
13 	mrb_value* data;
14 	mrb_value function () getter;
15 	void function () setter;
16 }
17 
18 struct global_entry
19 {
20 	global_variable* var;
21 	mrb_sym id;
22 }
23 
24 static const int MRB_SEGMENT_SIZE = 4;
25 
26 struct segment {
27 	mrb_sym[MRB_SEGMENT_SIZE] key;
28 	mrb_value[MRB_SEGMENT_SIZE] val;
29 	segment *next;
30 }
31 
32 struct iv_tbl
33 {
34 	segment* rootseg;
35 	size_t size;
36 	size_t last_len;
37 }
38 
39 mrb_value mrb_vm_special_get (mrb_state*, mrb_sym);
40 void mrb_vm_special_set (mrb_state*, mrb_sym, mrb_value);
41 mrb_value mrb_vm_iv_get (mrb_state*, mrb_sym);
42 void mrb_vm_iv_set (mrb_state*, mrb_sym, mrb_value);
43 mrb_value mrb_vm_cv_get (mrb_state*, mrb_sym);
44 void mrb_vm_cv_set (mrb_state*, mrb_sym, mrb_value);
45 mrb_value mrb_vm_const_get (mrb_state*, mrb_sym);
46 void mrb_vm_const_set (mrb_state*, mrb_sym, mrb_value);
47 mrb_value mrb_const_get (mrb_state*, mrb_value, mrb_sym);
48 void mrb_const_set (mrb_state*, mrb_value, mrb_sym, mrb_value);
49 mrb_bool mrb_const_defined (mrb_state*, mrb_value, mrb_sym);
50 void mrb_const_remove (mrb_state*, mrb_value, mrb_sym);
51 mrb_bool mrb_iv_p (mrb_state* mrb, mrb_sym sym);
52 void mrb_iv_check (mrb_state* mrb, mrb_sym sym);
53 mrb_value mrb_obj_iv_get (mrb_state* mrb, RObject* obj, mrb_sym sym);
54 void mrb_obj_iv_set (mrb_state* mrb, RObject* obj, mrb_sym sym, mrb_value v);
55 mrb_bool mrb_obj_iv_defined (mrb_state* mrb, RObject* obj, mrb_sym sym);
56 void mrb_obj_iv_ifnone (mrb_state* mrb, RObject* obj, mrb_sym sym, mrb_value v);
57 mrb_value mrb_iv_get (mrb_state* mrb, mrb_value obj, mrb_sym sym);
58 void mrb_iv_set (mrb_state* mrb, mrb_value obj, mrb_sym sym, mrb_value v);
59 mrb_bool mrb_iv_defined (mrb_state*, mrb_value, mrb_sym);
60 mrb_value mrb_iv_remove (mrb_state* mrb, mrb_value obj, mrb_sym sym);
61 void mrb_iv_copy (mrb_state* mrb, mrb_value dst, mrb_value src);
62 mrb_bool mrb_const_defined_at (mrb_state* mrb, mrb_value mod, mrb_sym id);
63 mrb_value mrb_gv_get (mrb_state* mrb, mrb_sym sym);
64 void mrb_gv_set (mrb_state* mrb, mrb_sym sym, mrb_value val);
65 void mrb_gv_remove (mrb_state* mrb, mrb_sym sym);
66 mrb_value mrb_cv_get (mrb_state* mrb, mrb_value mod, mrb_sym sym);
67 void mrb_mod_cv_set (mrb_state* mrb, RClass* c, mrb_sym sym, mrb_value v);
68 void mrb_cv_set (mrb_state* mrb, mrb_value mod, mrb_sym sym, mrb_value v);
69 mrb_bool mrb_cv_defined (mrb_state* mrb, mrb_value mod, mrb_sym sym);
70 mrb_value mrb_obj_iv_inspect (mrb_state*, RObject*);
71 mrb_value mrb_mod_constants (mrb_state* mrb, mrb_value mod);
72 mrb_value mrb_f_global_variables (mrb_state* mrb, mrb_value self);
73 mrb_value mrb_obj_instance_variables (mrb_state*, mrb_value);
74 mrb_value mrb_mod_class_variables (mrb_state*, mrb_value);
75 mrb_value mrb_mod_cv_get (mrb_state* mrb, RClass* c, mrb_sym sym);
76 mrb_bool mrb_mod_cv_defined (mrb_state* mrb, RClass* c, mrb_sym sym);
77 mrb_sym mrb_class_sym (mrb_state* mrb, RClass* c, RClass* outer);
78 void mrb_gc_mark_gv (mrb_state*);
79 void mrb_gc_free_gv (mrb_state*);
80 void mrb_gc_mark_iv (mrb_state*, RObject*);
81 size_t mrb_gc_mark_iv_size (mrb_state*, RObject*);
82 void mrb_gc_free_iv (mrb_state*, RObject*);